﻿using System;
using InnvoiceActual.BaseDeDatos.innvoicedbDataSetTableAdapters;
using InnvoiceActual.Logica.GestorObject;
using InnvoiceActual.Logica.GestorObject.Remito;
using MySql.Data.MySqlClient;
using System.Windows;
using System.Data;

namespace InnvoiceActual.Logica.GestorDB.RemitoDB
{
    public class CabeceraRemitoDB
    {
        #region Property

        EmpresaCS empresa = EmpresaCS.Instance;

        #endregion

        #region CRUD Methods

        public void AddCabeceraRemito(CabeceraRemito cabeceraRemito)
        {
            int resultadoConsulta;

            cabecera_remitoTableAdapter cabeceraRemitoTB = new cabecera_remitoTableAdapter();

            cabeceraRemitoTB.Connection.Open();
            MySqlTransaction transaccion = cabeceraRemitoTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = cabeceraRemito.CodigoEmpresa;
                int nroComprobante1 = cabeceraRemito.NroComprobante1;
                int nroComprobante2 = cabeceraRemito.NroComprobante2;
                byte codigoTipo = cabeceraRemito.CodigoTipo;

                int nroCliente = cabeceraRemito.NroCliente;
                int codigoTipoContribuyente = cabeceraRemito.CodigoTipoContribuyente;
                int codigoFormaDePago = cabeceraRemito.CodigoFormaDePago;

                resultadoConsulta = cabeceraRemitoTB.InsertCabeceraRemito(codigoEmpresa, (short)nroComprobante1, nroComprobante2, codigoTipo, nroCliente, codigoTipoContribuyente, codigoFormaDePago);

                transaccion.Commit();


            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error AddCabeceraRemito - CabeceraRemitoDB" + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                cabeceraRemitoTB.Connection.Close();
            }
        }

        public CabeceraRemito ObternerCabeceraSegunCodigo(short nro1, int nro2, byte tipo)
        {
            CabeceraRemito resultado = new CabeceraRemito();

            cabecera_remitoTableAdapter cabeceraTB = new cabecera_remitoTableAdapter();

            cabeceraTB.Connection.Open();
            MySqlTransaction transaccion = cabeceraTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = empresa.CodigoEmpresa;

                DataTable resultadoConsulta = cabeceraTB.GetDataByObtenerCabeceraSegunCodigo(codigoEmpresa, nro1, nro2, tipo);

                if (resultadoConsulta.Rows.Count > 0)
                {
                    foreach (DataRow item in resultadoConsulta.Rows)
                    {
                        resultado.CodigoEmpresa = Convert.ToInt16(item["codigo_empresa"].ToString());
                        resultado.NroComprobante1 = Convert.ToInt16(item["nro_comprobante1"].ToString());
                        resultado.NroComprobante2 = Convert.ToInt16(item["nro_comprobante2"].ToString());
                        resultado.CodigoTipo = Convert.ToByte(item["codigoTipo"]);

                        resultado.NroCliente = Convert.ToInt16(item["nro_cliente"].ToString());
                        resultado.CodigoTipoContribuyente = Convert.ToInt16(item["tipoContrib"].ToString());
                        resultado.CodigoFormaDePago = Convert.ToInt16(item["forma_pago"].ToString());
                    }
                }
                else
                {
                    resultado.NroComprobante1 = -1;
                    resultado.NroComprobante2 = -1;
                }
            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error ObternerCabeceraSegunCodigo(short nro1, int nro2, byte tipo) - CabeceraRemitoDB --> " + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                cabeceraTB.Connection.Close();
            }

            return resultado;

        }

        //Actualizar la cabecera del remito
        private int UpdateCabeceraRemito(int nro1, int nro2, int tipo,int nroCliente, int tipoContribuyente, int formaPago)
        {

            int resultadoConsulta = 0;

            cabecera_remitoTableAdapter cabeceraTB = new cabecera_remitoTableAdapter();

            cabeceraTB.Connection.Open();

            MySqlTransaction transaccion = cabeceraTB.Connection.BeginTransaction();

            try
            {
                int codigoEmpresa = empresa.CodigoEmpresa;

                resultadoConsulta = cabeceraTB.UpdateCabeceraRemito(nroCliente,tipoContribuyente,formaPago,codigoEmpresa, (short)nro1, nro2, tipo);
                transaccion.Commit();
            }
            catch (Exception e)
            {
                transaccion.Rollback();
                MessageBox.Show("Error UpdateCabeceraRemito - CabeceraRemitoDB" + e.Message, "Cuidado", MessageBoxButton.OK);
            }
            finally
            {
                cabeceraTB.Connection.Close();
            }

            return resultadoConsulta;
        }

        #endregion

        #region Methods

        public int UpdateCabeceraRemito(CabeceraRemito cabecera)
        {
            return UpdateCabeceraRemito(cabecera.NroComprobante1, cabecera.NroComprobante2, cabecera.CodigoTipo, cabecera.NroCliente,cabecera.CodigoTipoContribuyente, cabecera.CodigoFormaDePago);
        }

        #endregion
    }
}
